A data network allows people to communicate with each other and obtain information from various sources on the network, using their respective client devices that are “on” the network. For example, a Web browser application program, running in a user's workstation or laptop computer, can connect with a Web server to download a Web page. The connection may span several intermediate nodes or hops of the network, which may include specialized computers such as routers. These devices can discover routes between the end nodes through which they can forward messages that have been broken up into packets of data. Each node may be assigned a unique or global address, such as an Internet Protocol (IP) address. The Internet is a well known global inter-network in which networks of computers are connected to each other via routers.
Computer network protocols have a layered architecture. Typically, the upper most layer includes the functionality provided by an application program, such as a Web browser. This is the layer that, at least in the end nodes, may initiate a connection between two computers over a network. Thus, for example, a user may select a desired Website on his computer. The Web browser (running in that computer) starts a procedure that results in a connection being made with a server that is associated with the selected Website. The Web browser sends the request “down” through a series of functions referred to as an Internet protocol suite or Transport Control Protocol/Internet protocol (TCP/IP) stack. This stack of protocols is typically implemented in software at its higher layers, often as part of an operating system (OS) program running in the client device. Once the selected Website has been translated into an IP address of a Web server, the server is contacted over the Internet, and an appropriate connection is made with an upper layer program of a similar protocol suite implemented in the Web server.
To use the connection, the TCP/IP stack in the user's computer encapsulates a request message from the Web browser, in this example, a request identifying the Web page. The message may be encapsulated more than once, by several vertical layers on its way down in the protocol stack, including a network access layer. It finally arrives at the lowest layer of the client device, namely the physical layer (which is typically deemed to be a part of the network access layer).
After leaving the physical layer of the user's computer and then making its way through one or more hops in the network, the message from the Web browser arrives in the Web server, and is passed “up” the protocol stack in the Web server to a program that is deemed a peer of the Web browser. The peer program may then respond to the message, by causing the data for the requested Web page to be collected and sent back to the user's computer through the existing network connection. The data is broken up into multiple messages or packets, and is sent in a manner analogous to how the request message was sent.
An application program can have several applications or processes that are executed by one or more processors in the user's client computer. Each individual application may generate different types of network data traffic which may have different packet loss, latency, and flow elasticity requirements. By way of example, a social networking application may communicate control data, text, audio, and video over the network, each of which have different requirements with respect to the above variables. Each application is typically provided with its own port or group of ports to communicate this data, though they may all share the same lower layer network resources in the user's computer. In current implementations, the routers interconnecting each client device to a particular destination node (i.e., another client or a server) over the network include large transmit and receive buffers. As such, there is little or no packet loss and client devices are typically permitted to transmit packets without regard to flow control, resulting in “buffer bloat” within the router queues. Protocols such as TCP are self-tuning protocols which determine congestion and modify transmission speed based on detected packet loss.
Additionally, in current client-side implementations, the buffering of packets occurs at the driver level. The TCP/IP stack simply pushes packets down to the driver and the driver manages its own transmit and receive queues. Because of the large amount of buffering performed at the driver level within the client (an Ethernet driver can buffer up to 4000 packets in a queue prior to transmission), the networking stack is not provided with accurate network/congestion information. As such, what is needed is a more intelligent mechanism for performing network queuing within a client device in which a feedback channel is utilized used between the driver layer and the network stack layer.